// 权限控制
console.log('权限控制开始了')
import router from '@/router'
import store from '@/store'
import { asyncRoutes } from '@/router'

const whiteList = ['/login', '404']
router.beforeEach(async function(to, from, next) {
  const token = store.getters.token
  if (token) {
    // 如果有token
    if (to.path === '/login') {
      // 如果有token，且要去登录，强制跳转到首页
      next('/')
    } else {
      // 如果有token，但不去登录，放行
      // 先获取数据再进行跳转
      if (!store.getters.userId) {
        // 已经有用户id了，就不要再发送了
        const res = await store.dispatch('user/asyncGetUserInfo')// 一定不能少user 模块
        console.log('获取用户信息再跳转')
        // next()//如果在这里，登录之后就进不来这里，就无法放行

        const menus = res.roles.menus// 路由菜单列表
        console.log('权限列表', menus)
        const filterRouters = asyncRoutes.filter(route => menus.includes(route.children[0].name))
        console.log('过滤路由权限列表信息', filterRouters)
        store.commit('menu/setMenuList', filterRouters)// 添加到vuex中
        // 添加到路由信息
        router.addRoutes([...filterRouters, { path: '*', redirect: '/404', hidden: true }])
        next({
          ...to,
          replace: true
        })
      }
      next()
    }
  } else {
    // 如果无token
    // 假如在白名单，则直接放行，不在则直接强制跳转到登录
    if (!whiteList.includes(to.path)) {
      next('/login')
    } else {
      next()
    }
  }
})
